fix stupid missing statement
authorJonathan Blandford <jrb@redhat.com>
Tue, 26 Jun 2001 17:01:53 +0000 (17:01 +0000)
committerJonathan Blandford <jrb@src.gnome.org>
Tue, 26 Jun 2001 17:01:53 +0000 (17:01 +0000)
Tue Jun 26 12:59:28 2001  Jonathan Blandford  <jrb@redhat.com>

* gtk/gtktreemodelsort.c (gtk_tree_model_sort_set_model): fix
stupid missing statement

* gtk/gtktreeview.c (gtk_tree_view_set_destroy_count_func): New
private function for ATK.  It notifies you of how many _visible_
children are deleted when a node is deleted.  Should be used by
atk only.

12 files changed:
ChangeLog
ChangeLog.pre-2-0
ChangeLog.pre-2-10
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
gtk/gtktreemodelsort.c
gtk/gtktreeprivate.h
gtk/gtktreeview.c
gtk/gtktreeview.h
tests/testtreeview.c

index 03a1be9b1fb590bfd665345c532e851e30d068e8..8901d288a2cb46e55e7ba6b4f69d45631ea9c602 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+Tue Jun 26 12:59:28 2001  Jonathan Blandford  <jrb@redhat.com>
+
+       * gtk/gtktreemodelsort.c (gtk_tree_model_sort_set_model): fix
+       stupid missing statement
+
+       * gtk/gtktreeview.c (gtk_tree_view_set_destroy_count_func): New
+       private function for ATK.  It notifies you of how many _visible_
+       children are deleted when a node is deleted.  Should be used by
+       atk only.
+
 Tue Jun 26 11:06:34 2001  Owen Taylor  <otaylor@redhat.com>
 
        * gtk/gtkclist.c gtk/gtkentry.c gtk/gtkspinbutton.c:
index 03a1be9b1fb590bfd665345c532e851e30d068e8..8901d288a2cb46e55e7ba6b4f69d45631ea9c602 100644 (file)
@@ -1,3 +1,13 @@
+Tue Jun 26 12:59:28 2001  Jonathan Blandford  <jrb@redhat.com>
+
+       * gtk/gtktreemodelsort.c (gtk_tree_model_sort_set_model): fix
+       stupid missing statement
+
+       * gtk/gtktreeview.c (gtk_tree_view_set_destroy_count_func): New
+       private function for ATK.  It notifies you of how many _visible_
+       children are deleted when a node is deleted.  Should be used by
+       atk only.
+
 Tue Jun 26 11:06:34 2001  Owen Taylor  <otaylor@redhat.com>
 
        * gtk/gtkclist.c gtk/gtkentry.c gtk/gtkspinbutton.c:
index 03a1be9b1fb590bfd665345c532e851e30d068e8..8901d288a2cb46e55e7ba6b4f69d45631ea9c602 100644 (file)
@@ -1,3 +1,13 @@
+Tue Jun 26 12:59:28 2001  Jonathan Blandford  <jrb@redhat.com>
+
+       * gtk/gtktreemodelsort.c (gtk_tree_model_sort_set_model): fix
+       stupid missing statement
+
+       * gtk/gtktreeview.c (gtk_tree_view_set_destroy_count_func): New
+       private function for ATK.  It notifies you of how many _visible_
+       children are deleted when a node is deleted.  Should be used by
+       atk only.
+
 Tue Jun 26 11:06:34 2001  Owen Taylor  <otaylor@redhat.com>
 
        * gtk/gtkclist.c gtk/gtkentry.c gtk/gtkspinbutton.c:
index 03a1be9b1fb590bfd665345c532e851e30d068e8..8901d288a2cb46e55e7ba6b4f69d45631ea9c602 100644 (file)
@@ -1,3 +1,13 @@
+Tue Jun 26 12:59:28 2001  Jonathan Blandford  <jrb@redhat.com>
+
+       * gtk/gtktreemodelsort.c (gtk_tree_model_sort_set_model): fix
+       stupid missing statement
+
+       * gtk/gtktreeview.c (gtk_tree_view_set_destroy_count_func): New
+       private function for ATK.  It notifies you of how many _visible_
+       children are deleted when a node is deleted.  Should be used by
+       atk only.
+
 Tue Jun 26 11:06:34 2001  Owen Taylor  <otaylor@redhat.com>
 
        * gtk/gtkclist.c gtk/gtkentry.c gtk/gtkspinbutton.c:
index 03a1be9b1fb590bfd665345c532e851e30d068e8..8901d288a2cb46e55e7ba6b4f69d45631ea9c602 100644 (file)
@@ -1,3 +1,13 @@
+Tue Jun 26 12:59:28 2001  Jonathan Blandford  <jrb@redhat.com>
+
+       * gtk/gtktreemodelsort.c (gtk_tree_model_sort_set_model): fix
+       stupid missing statement
+
+       * gtk/gtktreeview.c (gtk_tree_view_set_destroy_count_func): New
+       private function for ATK.  It notifies you of how many _visible_
+       children are deleted when a node is deleted.  Should be used by
+       atk only.
+
 Tue Jun 26 11:06:34 2001  Owen Taylor  <otaylor@redhat.com>
 
        * gtk/gtkclist.c gtk/gtkentry.c gtk/gtkspinbutton.c:
index 03a1be9b1fb590bfd665345c532e851e30d068e8..8901d288a2cb46e55e7ba6b4f69d45631ea9c602 100644 (file)
@@ -1,3 +1,13 @@
+Tue Jun 26 12:59:28 2001  Jonathan Blandford  <jrb@redhat.com>
+
+       * gtk/gtktreemodelsort.c (gtk_tree_model_sort_set_model): fix
+       stupid missing statement
+
+       * gtk/gtktreeview.c (gtk_tree_view_set_destroy_count_func): New
+       private function for ATK.  It notifies you of how many _visible_
+       children are deleted when a node is deleted.  Should be used by
+       atk only.
+
 Tue Jun 26 11:06:34 2001  Owen Taylor  <otaylor@redhat.com>
 
        * gtk/gtkclist.c gtk/gtkentry.c gtk/gtkspinbutton.c:
index 03a1be9b1fb590bfd665345c532e851e30d068e8..8901d288a2cb46e55e7ba6b4f69d45631ea9c602 100644 (file)
@@ -1,3 +1,13 @@
+Tue Jun 26 12:59:28 2001  Jonathan Blandford  <jrb@redhat.com>
+
+       * gtk/gtktreemodelsort.c (gtk_tree_model_sort_set_model): fix
+       stupid missing statement
+
+       * gtk/gtktreeview.c (gtk_tree_view_set_destroy_count_func): New
+       private function for ATK.  It notifies you of how many _visible_
+       children are deleted when a node is deleted.  Should be used by
+       atk only.
+
 Tue Jun 26 11:06:34 2001  Owen Taylor  <otaylor@redhat.com>
 
        * gtk/gtkclist.c gtk/gtkentry.c gtk/gtkspinbutton.c:
index d331a9e85216390ad1430af11b2e96f041310584..b9fa1eb6637f6894c284dac75b4da102e357b28b 100644 (file)
@@ -278,7 +278,7 @@ gtk_tree_model_sort_set_model (GtkTreeModelSort *tree_model_sort,
   if (tree_model_sort->root)
     {
       gtk_tree_model_sort_free_level (tree_model_sort->root);
-      tree_model_sort->root;
+      tree_model_sort->root = NULL;
     }
 
   if (tree_model_sort->sort_list)
index 4af2b90d221f2ea95d15a94255f9d5cf042085bf..b27ca1baa93a5852181f303ae37a976f01796957 100644 (file)
@@ -135,6 +135,11 @@ struct _GtkTreeViewPrivate
   GList *column_drag_info;
   GtkTreeViewColumnReorder *cur_reorder;
 
+  /* ATK Hack */
+  GtkTreeDestroyCountFunc destroy_count_func;
+  gpointer destroy_count_data;
+  GtkDestroyNotify destroy_count_destroy;
+
   /* Scroll timeout (e.g. during dnd) */
   guint scroll_timeout;
 
index e7a72268f3feb71de850a2e966ba456c7db06f8b..a82650da4481d86248177fcfa0a76223b11de518 100644 (file)
@@ -836,7 +836,6 @@ gtk_tree_view_init (GtkTreeView *tree_view)
   gtk_tree_view_set_adjustments (tree_view, NULL, NULL);
   tree_view->priv->selection = _gtk_tree_selection_new_with_tree_view (tree_view);
   _gtk_tree_view_update_size (tree_view);
-
 }
 
 \f
@@ -995,6 +994,13 @@ gtk_tree_view_destroy (GtkObject *object)
       tree_view->priv->column_drop_func_data = NULL;
     }
 
+  if (tree_view->priv->destroy_count_destroy &&
+      tree_view->priv->destroy_count_data)
+    {
+      (* tree_view->priv->destroy_count_destroy) (tree_view->priv->destroy_count_data);
+      tree_view->priv->destroy_count_data = NULL;
+    }
+
   gtk_tree_row_reference_free (tree_view->priv->cursor);
   tree_view->priv->cursor = NULL;
 
@@ -4414,6 +4420,16 @@ gtk_tree_view_has_child_toggled (GtkTreeModel *model,
     gtk_tree_path_free (path);
 }
 
+static void
+count_children_helper (GtkRBTree *tree,
+                      GtkRBNode *node,
+                      gpointer   data)
+{
+  if (node->children)
+    _gtk_rbtree_traverse (node->children, node->children->root, G_POST_ORDER, count_children_helper, data);
+  ((gint *)data)++;
+}
+
 static void
 gtk_tree_view_deleted (GtkTreeModel *model,
                       GtkTreePath  *path,
@@ -4446,6 +4462,14 @@ gtk_tree_view_deleted (GtkTreeModel *model,
   /* Ensure we don't have a dangling pointer to a dead node */
   ensure_unprelighted (tree_view);
 
+  if (tree_view->priv->destroy_count_func)
+    {
+      gint child_count = 0;
+      if (node->children)
+       _gtk_rbtree_traverse (node->children, node->children->root, G_POST_ORDER, count_children_helper, &child_count);
+      (* tree_view->priv->destroy_count_func) (tree_view, path, child_count, tree_view->priv->destroy_count_data);
+    }
+
   if (tree->root->count == 1)
     {
       if (tree_view->priv->tree == tree)
@@ -7148,6 +7172,14 @@ gtk_tree_view_real_collapse_row (GtkTreeView *tree_view,
   /* Ensure we don't have a dangling pointer to a dead node */
   ensure_unprelighted (tree_view);
 
+  if (tree_view->priv->destroy_count_func)
+    {
+      gint child_count = 0;
+      if (node->children)
+       _gtk_rbtree_traverse (node->children, node->children->root, G_POST_ORDER, count_children_helper, &child_count);
+      (* tree_view->priv->destroy_count_func) (tree_view, path, child_count, tree_view->priv->destroy_count_data);
+    }
+
   if (gtk_tree_view_unref_and_check_selection_tree (tree_view, node->children))
     g_signal_emit_by_name (G_OBJECT (tree_view->priv->selection), "changed", 0);
   _gtk_rbtree_remove (node->children);
@@ -8158,3 +8190,30 @@ gtk_tree_view_create_row_drag_icon (GtkTreeView  *tree_view,
   return drawable;
 }
 
+
+/**
+ * gtk_tree_view_set_destroy_count_func:
+ * @tree_view: A #GtkTreeView
+ * @func: Function to be called when a view row is destroyed, or NULL
+ * @data: User data to be passed to @func, or NULL
+ * @destroy: Destroy notifier for @data, or NULL
+ * 
+ * This function should almost never be used.  It is meant for private use by
+ * ATK for determining the number of visible rows that are removed when the user
+ * collapses a row, or a row is deleted.
+ **/
+void
+gtk_tree_view_set_destroy_count_func (GtkTreeView             *tree_view,
+                                     GtkTreeDestroyCountFunc  func,
+                                     gpointer                 data,
+                                     GtkDestroyNotify         destroy)
+{
+  g_return_if_fail (GTK_IS_TREE_VIEW (tree_view));
+
+  if (tree_view->priv->destroy_count_destroy)
+    (* tree_view->priv->destroy_count_destroy) (tree_view->priv->destroy_count_data);
+
+  tree_view->priv->destroy_count_func = func;
+  tree_view->priv->destroy_count_data = data;
+  tree_view->priv->destroy_count_destroy = destroy;
+}
index b459677a91c4039856c514ebc4d89759f9e7b274..72faba4085a7f59647996d067b4db6de18209203 100644 (file)
@@ -275,6 +275,21 @@ gboolean               gtk_tree_view_get_dest_row_at_pos           (GtkTreeView
 GdkPixmap             *gtk_tree_view_create_row_drag_icon          (GtkTreeView               *tree_view,
                                                                    GtkTreePath               *path);
 
+
+/* This function should really never be used.  It is just for use by ATK.
+ */
+typedef void (* GtkTreeDestroyCountFunc) (GtkTreeView *tree_view,
+                                         GtkTreePath *path,
+                                         gint         children,
+                                         gpointer     user_data);
+void gtk_tree_view_set_destroy_count_func (GtkTreeView             *tree_view,
+                                          GtkTreeDestroyCountFunc  func,
+                                          gpointer                 data,
+                                          GtkDestroyNotify         destroy);
+
+
+
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */
index a8bfed3dd1cea0f6440c83e208879e4cb5b53496..204d4574b27cb87c112b1d76bf64a2cba5848080 100644 (file)
@@ -1446,10 +1446,11 @@ run_automated_tests (void)
   {
     /* Make sure tree store mutations don't crash anything */
     GtkTreeStore *store;
-    
+    GtkTreeIter root;
+
     store = gtk_tree_store_new_with_types (1, G_TYPE_INT);
-    
-    treestore_torture_recurse (store, NULL, 0);
+    gtk_tree_model_get_iter_root (GTK_TREE_MODEL (store), &root);
+    treestore_torture_recurse (store, &root, 0);
     
     g_object_unref (G_OBJECT (store));
   }